home *** CD-ROM | disk | FTP | other *** search
-
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <glib.h>
- #include <strlib.h>
- #include "col.h"
-
- /* #include "..\lib.h" */
-
- void box(int x, int y)
- {
- line(x, y, x+20, y, PSET, col15, 0, 0xffff);
- line(x, y, x, y+20, PSET, col15, 0, 0xffff);
- line(x, y+20, x+20, y+20, PSET, col8, 0, 0xffff);
- line(x+20, y+20, x+20, y, PSET, col8, 0, 0xffff);
- return;
- }
-
- /* input area 0,0,114,139 */
- void minpnb(int x0, int y0)
- {
- int bcl[16];
- int xx,yy;
- bcl[0] = col1;
-
- /* 影枠 影塗色 */
- line(x0+10, y0+10, x0+114, y0+139, XOR, col8, 2, 0xffff);
-
- /* キーボード */
- line(x0+0,y0+0,x0+105,y0+130, PSET, col7, 2, 0xffff);
- line(x0+0,y0+0,x0+105,y0+130, PSET, col1, 1, 0xffff);
- line(x0+105,y0+0,x0+108,y0+3, PSET, col1, 0, 0xffff);
- line(x0+108,y0+3,x0+108,y0+133, PSET, col1, 0, 0xffff);
- /* line(x0+108,y0+133,x0+105,y0+130, PSET, col1, 0, 0xffff); */
- line(x0+108,y0+133,x0+3,y0+133, PSET, col1, 0, 0xffff);
- line(x0+3,y0+133,x0+0,y0+130, PSET, col1, 0, 0xffff);
-
- /* キーボード外枠塗色 */
- drmode(PSET);
- paint(x0+106,y0+10, 1, col1, 1, bcl);
- paint(x0+10,y0+131, 1, col1, 1, bcl);
-
- /* データ表示窓 */
- line(x0+5,y0+5,x0+100,y0+25, PSET, col1, 2, 0xffff);
- line(x0+5,y0+5,x0+100,y0+25, PSET, col8, 1, 0xffff);
- /* キー作成 */
- xx=x0+5; yy=y0+30;
- box(xx, yy);
- symbol_(xx+2, yy+2, "7", 1,1, col15,0,PSET);
- xx=x0+30; yy=y0+30;
- box(xx, yy);
- symbol_(xx+2, yy+2, "8", 1,1, col15,0,PSET);
- xx=x0+55; yy=y0+30;
- box(xx, yy);
- symbol_(xx+2, yy+2, "9", 1,1, col15,0,PSET);
- xx=x0+5; yy=y0+55;
- box(xx, yy);
- symbol_(xx+2, yy+2, "4", 1,1, col15,0,PSET);
- xx=x0+30; yy=y0+55;
- box(xx, yy);
- symbol_(xx+2, yy+2, "5", 1,1, col15,0,PSET);
- xx=x0+55; yy=y0+55;
- box(xx, yy);
- symbol_(xx+2, yy+2, "6", 1,1, col15,0,PSET);
- xx=x0+5; yy=y0+80;
- box(xx, yy);
- symbol_(xx+2, yy+2, "1", 1,1, col15,0,PSET);
- xx=x0+30; yy=y0+80;
- box(xx, yy);
- symbol_(xx+2, yy+2, "2", 1,1, col15,0,PSET);
- xx=x0+55; yy=y0+80;
- box(xx, yy);
- symbol_(xx+2, yy+2, "3", 1,1, col15,0,PSET);
- xx=x0+5; yy=y0+105;
- box(xx, yy);
- symbol_(xx+2, yy+2, "0", 1,1, col15,0,PSET);
- xx=x0+30; yy=y0+105;
- box(xx, yy);
- symbol_(xx+2+6, yy+2, ".", 1,1, col15,0,PSET);
- xx=x0+80, yy=y0+30;
- box(xx, yy);
- symbol_(xx+2, yy+2, "←", 1,1, col15,0,PSET);
- xx=x0+80, yy=y0+55;
- box(xx, yy);
- symbol_(xx+2, yy+2, "-", 1,1, col15,0,PSET);
- xx=x0+55, yy=y0+105;
- line(xx, yy, xx+45, yy, PSET, col15, 0, 0xffff);
- line(xx, yy, xx, yy+20, PSET, col15, 0, 0xffff);
- line(xx, yy+20, xx+45, yy+20, PSET, col8, 0, 0xffff);
- line(xx+45, yy+20, xx+45, yy, PSET, col8, 0, 0xffff);
- symbol_(xx+4, yy+2, "実", 1,1, col15,0,PSET);
- symbol_(xx+25, yy+2, "行", 1,1, col15,0,PSET);
- return;
- }
-
- /* xy check return( yes=1, no=0 ) */
- int xychk(int x, int y, int x1, int y1, int x2, int y2)
- {
- if (x1<=x && x<=x2 && y1<=y && y<=y2) return(1);
- return(0);
- }
-
- /* input num set and print */
- void numset(int x, int y, int nn, char nline[], int *ncnt, int *pf)
- {
- if ((nn == '-' && *ncnt != 0) || (nn != 8 && *ncnt == 11) || ( nn == '.' && *pf != 0)) {
- putchar('\7'); return; /* error */
- }
- if ( nn == 8 ) {
- if (*ncnt == 0) putchar('\7'); /* error */
- else {
- (*ncnt)--;
- symbol(x+8+8*(*ncnt),y+8,nline+(*ncnt), 1, 2, col1, 0, PSET);
- if (nline[*ncnt] == '.') *pf = 0; /* flag clear */
- nline[*ncnt] = '\0';
- }
- return;
- }
- if (nn == '.') *pf = 1; /* flag set */
- nline[*ncnt] = nn;
- symbol(x+8+8*(*ncnt),y+8,nline+(*ncnt), 1, 2, col14, 0, PSET);
- (*ncnt)++;
- return;
- }
-
- /* mouse input */
- double minpn(int x, int y, double pnum)
- {
- int ncnt = 0, pf = 0, cnt, mx, my, nn;
- char nline[12], i;
- void GDS_getBlock();
- int GDS_putBlock();
- unsigned ddadr[2];
- unsigned char page;
- char buf[8052];
-
- MOS_disp(1); /* mouse disp off */
-
- BSETDATAADR(ddadr, buf);
- page = 0;
- GDS_getBlock(ddadr[0], ddadr[1], page, x, y, x+114, y+139);
-
- for (i=0; i <12; i++) nline[i]=0;
- minpnb(x,y);
- MOS_horizon(x, x+105);
- MOS_vertical(y, y+130);
- MOS_disp(0); /* mouse disp on */
-
- while (0==0) {
- nn = 0;
- while (MOS_rdon(0, &cnt, &mx, &my) == 0);
- if (xychk(mx, my, x+5, y+30, x+25, y+50) == 1) nn = '7';
- if (xychk(mx, my, x+30, y+30, x+50, y+50) == 1) nn = '8';
- if (xychk(mx, my, x+55, y+30, x+75, y+50) == 1) nn = '9';
- if (xychk(mx, my, x+5, y+55, x+25, y+75) == 1) nn = '4';
- if (xychk(mx, my, x+30, y+55, x+50, y+75) == 1) nn = '5';
- if (xychk(mx, my, x+55, y+55, x+75, y+75) == 1) nn = '6';
- if (xychk(mx, my, x+5, y+80, x+25,y+100) == 1) nn = '1';
- if (xychk(mx, my, x+30, y+80, x+50,y+100) == 1) nn = '2';
- if (xychk(mx, my, x+55, y+80, x+75,y+100) == 1) nn = '3';
- if (xychk(mx, my, x+5, y+105,x+25,y+125) == 1) nn = '0';
- if (xychk(mx, my, x+30, y+105,x+50,y+125) == 1) nn = '.';
- if (xychk(mx, my, x+80, y+30, x+100,y+50) == 1) nn = 8; /* back spase */
- if (xychk(mx, my, x+80, y+55, x+100,y+75) == 1) nn = '-';
- if (xychk(mx, my, x+55, y+105,x+100,y+125) == 1) {
- MOS_horizon(0, 639);
- MOS_vertical(0, 399);
- GDS_putBlock(ddadr[0], ddadr[1], page, x, y, x+114, y+139, PSET);
- if (nline[0] == '\0') return(pnum);
- return(atof(nline));
- }
- if (nn != 0) numset(x, y, nn, nline, &ncnt, &pf);
- else putchar('\7');
- while (MOS_rdopen(0, &cnt, &mx, &my) == 1);
- }
- }
-
- /* end of file */